Tracing software program execution is an excellent tool used for debugging code and understanding execution flows in a test environment. Tracing can also be used in a production environment for problem determination. In the production environment, a problem may be the code (e.g. code paths, code path sequences that were abnormal or unexpected), the input data (e.g. values that are incorrect, out of range or unexpected) or the general computing environment (lack of memory, central processing unit (CPU) cycles, Direct Access Storage Device (DASD), or network throughput).
Especially for long running tasks or daemons, tracing in the production environment produces large quantities of data. Thus, the tracing becomes problematic in that the trace output can cause the program execution to slow down, which may prevent the production system from meeting its service goals. Further, for intermittent problems, tracing must remain on for a long time in order to gather useful data. DASD storage can become an issue, and collecting large quantities of trace data requires extra time, disk and memory to analyze.